#pragma once
#include <d3d11.h>
#include <d3dx11.h>
#include "../typedefs/typedefs.h"
#include "d3dstructs.h"
#include "../import/cimport.h"
#include "../camera/camera.h"

namespace NEngine {

// ================================================================================================
// CRenderPass - base class for all render pass classes
// ================================================================================================
class CRenderPass {

public:

    // -- reference data essential for every render pass
    struct SPassRef {
        ID3D11Device** device;              // -- device
        ID3D11DeviceContext** ictx;         // -- context
        ID3D11RenderTargetView** rt;        // -- render target
        ID3D11DepthStencilView** dstencil;  // -- depth stencil
        ID3D11VertexShader** vtxshader;     // -- vertex shader
        ID3D11PixelShader** psshader;       // -- pixel shader
        SConstantBuffer* cb;                // -- constant buffer
        ID3D11Buffer** cbuffmats;           // -- constant buffer
        CImportObject::SObject* objects;    // -- scene objects
        CCamera** view;                      // -- matrix view
        uint numsres;                       // -- number of shader resources
        ID3D11ShaderResourceView** sres;    // -- shader resources
    };

protected: 

    // -- clear color
    const static float clearcolor[4]; 

    SPassRef rpref;                         // -- render pass reference

    // -- draw call
    void Draw();

public:

    // -- constructor
    CRenderPass();
    CRenderPass(SPassRef& rpdata);

    // -- render pass call 
    void RenderPass();
    void SetRPass(const SPassRef& rpref);

};

// ================================================================================================
// Constructor
// ================================================================================================
inline CRenderPass::CRenderPass() {
}

inline CRenderPass::CRenderPass(SPassRef& _rpref) : rpref(_rpref) {
}

// ================================================================================================
// Mutators
// ================================================================================================
inline void CRenderPass::SetRPass(const SPassRef& _rpref) {
    rpref = _rpref;
}

} // -- namespace NEngine